package 力扣._71_简化路径;

import java.util.Deque;
import java.util.LinkedList;

class Solution {
    public String simplifyPath(String path) {
        // 绝对路径 - / 开头
        // /(单个或多个), . , ..  这些都是操作符，不进入栈中
        // 只有目录应该进入栈中，根据操作符调整栈顶的目录, 最终将栈中逆序输出，并以/间隔得到的就是规范路径
        Deque<String> stack = new LinkedList<>();

        int len = path.length();
        int i = 0;
        while (i < len) {
            // 找到当前相邻的 / 的最后一个
            while (i+1<len && path.charAt(i+1) == '/') i++;
            // 找到下一个不相邻的 / 的第一个
            int j=i+1;
            if(j>=len) break;
            while (j<len && path.charAt(j) != '/') j++;
            // 将这两个之前的文本提取出来，判断其是操作符 还是 目录
            String s = path.substring(i+1, j);
            if (s.equals("..")) {
                if (!stack.isEmpty()) {
                    stack.pop();
                }
            }else if (!s.equals(".")) {
                stack.push(s);
            }
            i = j;
        }


        if(stack.isEmpty()) return "/";
        StringBuilder sb = new StringBuilder();
        while (!stack.isEmpty()) {
            sb.insert(0, "/"+stack.pop());
        }
        return sb.toString();
    }

    public static void main(String[] args) {
        Solution s = new Solution();
        System.out.println(s.simplifyPath("/home/"));
    }
}